#ifndef CIRCLEBUTTON_H
#define CIRCLEBUTTON_H

#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>
#include <QPushButton>

////////////////////////////////////////////
/// 圆形按钮
////////////////////////////////////////////
class CircleButton : public QPushButton
{
public:
    explicit CircleButton(QWidget* parent = nullptr);

protected:
    ///@brief 重写 QPushButton 的绘制事件，实现了将普通方形图标裁剪为圆形显示的效果。
    void paintEvent(QPaintEvent* event) override
    {
        Q_UNUSED(event);

        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing); // 启用抗锯齿

        /* 绘制圆形图片, set_icon()后才进入后面的逻辑 */
        if (!icon().isNull()) {
            // 获取当前图标对应的位图
            // 根据按钮是否可用选择正常或禁用状态图标
            // 自动缩放到 iconSize() 指定的大小
            QPixmap pixmap = icon().pixmap(iconSize(), isEnabled() ? QIcon::Normal : QIcon::Disabled);

            QPainterPath path;
            path.addEllipse(rect()); // 创建与按钮矩形区域相同的圆形路径
            painter.setClipPath(path); // 设置裁剪区域，后续绘制只在此区域内显示

            painter.drawPixmap(rect(), pixmap); // 在按钮整个区域绘制图标
        }
    }
};

#endif // CIRCLEBUTTON_H
